package com.wg.net.server.tcp.handle;

import com.wg.net.session.TcpSession;
import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler.Sharable;
import io.netty.channel.ChannelHandlerContext;

/**
 * TCP服务器端处理器（处理原始TCP连接的数据读写）
 *
 * @author 少爷123
 */
@Sharable
public class SocketServerHandler extends AbstractServerHandler<ByteBuf> {
    /**
     * 读取TCP数据并分发（核心读逻辑）
     *
     * @param ctx     通道上下文
     * @param byteBuf 读取到的字节缓冲区
     */
    @Override
    protected final void channelRead0(ChannelHandlerContext ctx, ByteBuf byteBuf) {
        // 直接读取字节数据（避免额外数组拷贝）
        int readableBytes = byteBuf.readableBytes();
        if (readableBytes == 0) {
            return;
        }

        byte[] data = new byte[readableBytes];
        byteBuf.readBytes(data);
        dispatchPacket(ctx, data);
    }

    /**
     * 创建TCP会话（具体实现）
     *
     * @param channel 当前连接通道
     * @return TCP会话对象
     */
    @Override
    protected TcpSession createSession(Channel channel) {
        return new TcpSession(channel);
    }
}